// utils/http.js

// 导入模块
import Request from 'luch-request'

import { useUserStore } from '@/stores/user.js'

// 接口白名单
const whiteList = ['/code', '/login', '/login/password']

// 实例化网络请求
const http = new Request({
	// 接口基地址
	baseURL: 'https://consult-api.itheima.net/',
	custom: {
		loading: true,
	},
})
// 请求拦截器
http.interceptors.request.use(
	(config) => {
		// 显示加载状态提示
		if (config.custom.loading) {
			uni.showLoading({ title: '正在加载...', mask: true })
		}

		// 用户相关的数据
		const userStore = useUserStore()
		// 全局默认的头信息（方便以后扩展）
		const defaultHeader = {}
		// 判断是否存在 token 并且不在接口白单当中
		if (userStore.token && !whiteList.includes(config.url)) {
			defaultHeader.Authorization = 'Bearer ' + userStore.token
		}
		config.header = {
			...defaultHeader,
			...config.header,
		}
		return config
	},
	(err) => {
		uni.hideLoading()
		return Promise.reject(err)
	}
)
// 响应拦截器
http.interceptors.response.use(
	(res) => {
		uni.hideLoading()
		return res
	},
	(err) => {
		// 隐藏加载状态提示
		uni.hideLoading()

		if (err.statusCode === 401) reLogin()
		return Promise.reject(err)
	}
)

function reLogin() {
	// 跳转到登录页面
	uni.redirectTo({
		url: `/pages/login/index`,
	})
}

// 导出配置好的模网络模块
export { http }
